#!/bin/bash

#获取当前的工作路径 

work_path=$(pwd)

#检查是否存在namp进程
let procCnt=`ps -A |grep "nmap"|grep -v grep | grep -c sh|awk '{printf("%d",$1)}'`

if [ $procCnt -ge  3 ];then

    echo $(date)   nmap running
    exit
else
    echo $(date)   nmap not run

fi

#使用nmap扫描 ipduan.txt中所有矿机是否开启了4028端口
sudo nmap -sS -Pn -p 4028 -n --open --disable-arp-ping --min-hostgroup 4096 --min-parallelism 20 --host-timeout 30 -v -T4 -oG $work_path/Result-6.txt -iL $work_path/ipduan.txt 1> /dev/null

#-Pn： 禁用PING检测
#-p 是端口
#--open： 只输出检测状态为open的端口，即开放的端口
#-sS：使用SYN方式扫描，默认用的是-sT方式，即TCP方式，需要完成完整的三次握手，比较费时，SYN就比较快一些了，具体自己百度了解
#-min-hostgroup 4096：调整并行扫描组的大小，nmap是按照分组的方式进行探测，组越大扫描越快，相应的性能消耗也越高
#--host-timeout 10：检测超时的跳过，减小可以略微提升速度，但是准确性会下降。
#-T5：总共有T0-T5，貌似T4比较折中，T5疯狂模式，准确性会降低
#-v：打印详细扫描过程
# -oG：输出为比较人性化的格式，一条记录一行，后期好处理
#-iL：载入ip段文件，批量扫，不用一条条执行了


#找出扫描到的矿机ip
grep 4028 $work_path/Result-6.txt |grep -v 'Nmap' |awk -F ' ' '{print $2}'  |grep -v 'Ports' > $work_path/alive_ip


#生成x.x.x.1-255的ip列表
cat $work_path/alive_ip  |grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+' | sort | uniq | perl -e 'while(<>){ chop; print "$_.1-255\n"}' 1> $work_path/connect_in_ips.txt

#如果collect.js进程运行等待20秒
while true 
do
       
        let procCnt=`ps -A |grep "collect-miner-stat/collect.js"|grep -v grep | grep -c sh|awk '{printf("%d",$1)}'`

        if [ $procCnt -lt  3 ];then
		#合并两个文件并去重
		cat $work_path/connect_in_ips.txt /home/ubuntu/collect-miner-stat/path_to_ip_files.txt | sort | uniq > $work_path/all_ips.txt

		#把path_to_ip_files.txt 复制扫描软件
		sudo mv $work_path/all_ips.txt /home/ubuntu/collect-miner-stat/path_to_ip_files.txt

		break
	else
		sleep 20

	fi
done

echo $(date)   have been nmap
